package com.eltsistemas.controller.alteracao;

import java.text.ParseException;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.eltsistemas.adapter.Calendario;
import com.eltsistemas.dao.GenericDao;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.modelo.AlteracaoSalarial;
import com.eltsistemas.modelo.Funcao;
import com.eltsistemas.modelo.Funcionario;
import com.eltsistemas.modelo.Setor;

@Controller
@RequestMapping(value="/alteracao")
public class AlteracaoAltera {
	
	@RequestMapping(value="/alterado", method=RequestMethod.POST)
	public String alterado(AlteracaoSalarial altSalario, String dtAlteracao, Double salarioNovo, 
						   Long idSetor1, Long idFuncao1 , String nomeFuncionario2
						   ) throws ParseException
	{
		try
		{
			String motivo = altSalario.getMotivo();
			
			Session session = new HibernateUtil().getSession();
			session.beginTransaction();
			
			GenericDao<Setor> daoSetor = new GenericDao<>(session, Setor.class);
			GenericDao<Funcao> daoFuncao = new GenericDao<>(session, Funcao.class);
			GenericDao<Funcionario> daoFuncionario = new GenericDao<>(session, Funcionario.class);
			
			Setor setor = daoSetor.findById(idSetor1);
			Funcao funcao = daoFuncao.findById(idFuncao1);
			Funcionario funcionario= daoFuncionario.findByName(nomeFuncionario2);
			
			altSalario = (AlteracaoSalarial) session.load(AlteracaoSalarial.class, altSalario.getId());
				
			altSalario.setFuncionario(funcionario);
			altSalario.setDataAlteracao( new Calendario().getData(dtAlteracao) );
			altSalario.setSalarioAtual(salarioNovo);
			altSalario.setFuncao(funcao);
			altSalario.setSetor(setor);
			altSalario.setMotivo(motivo);
				
			//Comita os dados no banco
			GenericDao<AlteracaoSalarial> daoAltSalario = new GenericDao<>(session, AlteracaoSalarial.class);
			session = daoAltSalario.altera(altSalario);	
			session.beginTransaction().commit();
			session.close();
	
			return "redirect:lista?nomeFuncionario="+nomeFuncionario2;	
		}
		
		catch(HibernateException e)
		{
			return "redirect:/painel/erro";
		}
	}

}
